package br.com.sovi.resources.cerca;

import java.util.ArrayList;
import java.util.List;

import org.openinsula.vulcano.orm.command.DaoCommandWithoutResult;
import org.openinsula.vulcano.orm.dao.query.DaoQuery;
import org.openinsula.vulcano.orm.dao.query.builder.DaoSelect;

import br.com.sovi.persistence.Dispositivo;
import br.com.sovi.persistence.Ponto;

public class DeleteCercaCommand extends DaoCommandWithoutResult {

	private final String serial;

	public DeleteCercaCommand(String serial) {
		this.serial = serial;
	}

	@Override
	public void executeWithoutResult() {
		DaoQuery<Dispositivo> dispositivoQuery = new DaoSelect<Dispositivo>().all().from(Dispositivo.class).eq("serial", serial).limit(1).toQuery();
		
		Dispositivo dispositivo = dao.findUnique(dispositivoQuery);
		
		if (dispositivo == null) {
			throw new IllegalArgumentException("O dispositivo não existe.");
		}
		
		List<Ponto> pontos = dispositivo.getCerca().getPontos();
		
		dao.remove(pontos.toArray());
		
		dispositivo.getCerca().setPontos(new ArrayList<Ponto>());
		
		dao.persist(dispositivo, dispositivo.getCerca());
	}

}
